﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ninject;
using PGE.AfastamentosTempMVC.Modelo;
using PGE.AfastamentosTempMVC.Repositorio.Interfaces;

namespace PGE.AfastamentosTempMVC.Repositorio.Implementacao
{
    public class NucleoRepositorio : INucleoRepositorio
    {
        private IUnitOfWork _UntWork;

        [Inject]
        public NucleoRepositorio(IUnitOfWork UntWork)
        {
            _UntWork = UntWork;
        }

        #region INucleoRepositorio Members

        public void Adicionar(Nucleo nucleo)
        {
            _UntWork.contexto.Nucleos.Add(nucleo);
            _UntWork.Commit();
        }

        public void Editar(Nucleo nucleo)
        {
            _UntWork.contexto.Entry(nucleo).State = System.Data.EntityState.Modified;
            _UntWork.Commit();

        }

        public void Deletar(Nucleo nucleo)
        {
            _UntWork.contexto.Nucleos.Remove(nucleo);
            _UntWork.Commit();
        }

        public void DeletarMuitos(Func<Nucleo, bool> where)
        {
            _UntWork.contexto.Nucleos.Where(where).ToList().ForEach(Nucleo => _UntWork.contexto.Nucleos.Remove(Nucleo));
            _UntWork.Commit();
        }

        public Nucleo ObterPorID(int Id)
        {
            return _UntWork.contexto.Nucleos.Find(Id);
        }

        public Nucleo ObterPornome(Func<Nucleo, bool> where)
        {
            return _UntWork.contexto.Nucleos.Where(where).FirstOrDefault();
        }

        public Nucleo ObterPrimeiro()
        {
            return _UntWork.contexto.Nucleos.FirstOrDefault();
        }

        public Nucleo ObterPrimeiro(Func<Nucleo, bool> where)
        {
            return _UntWork.contexto.Nucleos.Where(where).FirstOrDefault();
        }

        public IEnumerable<Nucleo> ListarTudo()
        {
            return _UntWork.contexto.Nucleos.ToList();
        }

        public IQueryable<Nucleo> GetQueryable()
        {
            return _UntWork.contexto.Nucleos;
        }

        public IEnumerable<Nucleo> ListarMuitos(Func<Nucleo, bool> where)
        {
            return _UntWork.contexto.Nucleos.Where(where).ToList();
        }

        #endregion
    }
}
